/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file    stm32f1xx_it.c
  * @brief   Interrupt Service Routines.
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2023 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */
/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stm32f1xx_it.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "ScnsInclude.h"
#include "stm32f103xe.h"
#include "hwInclude.h"
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN TD */

/* USER CODE END TD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/* External variables --------------------------------------------------------*/
extern DMA_HandleTypeDef hdma_memtomem_dma1_channel1;

extern TIM_HandleTypeDef htim6;

extern TIM_HandleTypeDef htim7;

extern DMA_HandleTypeDef hdma_usart1_tx;

extern DMA_HandleTypeDef hdma_usart1_rx;

extern DMA_HandleTypeDef hdma_usart3_rx;

extern DMA_HandleTypeDef hdma_usart3_tx;

extern UART_HandleTypeDef huart1;

extern UART_HandleTypeDef huart3;
/* USER CODE BEGIN EV */

/* USER CODE END EV */

/******************************************************************************/
/*           Cortex-M3 Processor Interruption and Exception Handlers          */
/******************************************************************************/
/**
  * @brief This function handles Non maskable interrupt.
  */
void NMI_Handler(void)
{
    /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
    scnsYingErrorHandler(0,0,__FILE__,__LINE__,__FUNCTION__);

    /* USER CODE END NonMaskableInt_IRQn 0 */
    /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
    while(1)
    {
    }
    /* USER CODE END NonMaskableInt_IRQn 1 */
}

/**
  * @brief This function handles Hard fault interrupt.
  */
void HardFault_Handler(void)
{
    /* USER CODE BEGIN HardFault_IRQn 0 */
    scnsYingErrorHandler(0,0,__FILE__,__LINE__,__FUNCTION__);

    /* USER CODE END HardFault_IRQn 0 */
    while(1)
    {
        /* USER CODE BEGIN W1_HardFault_IRQn 0 */
        /* USER CODE END W1_HardFault_IRQn 0 */
    }
}

/**
  * @brief This function handles Memory management fault.
  */
void MemManage_Handler(void)
{
    /* USER CODE BEGIN MemoryManagement_IRQn 0 */
    scnsYingErrorHandler(0,0,__FILE__,__LINE__,__FUNCTION__);

    /* USER CODE END MemoryManagement_IRQn 0 */
    while(1)
    {
        /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
        /* USER CODE END W1_MemoryManagement_IRQn 0 */
    }
}

/**
  * @brief This function handles Prefetch fault, memory access fault.
  */
void BusFault_Handler(void)
{
    /* USER CODE BEGIN BusFault_IRQn 0 */
    scnsYingErrorHandler(0,0,__FILE__,__LINE__,__FUNCTION__);

    /* USER CODE END BusFault_IRQn 0 */
    while(1)
    {
        /* USER CODE BEGIN W1_BusFault_IRQn 0 */
        /* USER CODE END W1_BusFault_IRQn 0 */
    }
}

/**
  * @brief This function handles Undefined instruction or illegal state.
  */
void UsageFault_Handler(void)
{
    /* USER CODE BEGIN UsageFault_IRQn 0 */
    scnsYingErrorHandler(0,0,__FILE__,__LINE__,__FUNCTION__);

    /* USER CODE END UsageFault_IRQn 0 */
    while(1)
    {
        /* USER CODE BEGIN W1_UsageFault_IRQn 0 */
        /* USER CODE END W1_UsageFault_IRQn 0 */
    }
}

/**
  * @brief This function handles System service call via SWI instruction.
  */
void SVC_Handler(void)
{
    /* USER CODE BEGIN SVCall_IRQn 0 */
    scnsYingErrorHandler(0,0,__FILE__,__LINE__,__FUNCTION__);

    /* USER CODE END SVCall_IRQn 0 */
    /* USER CODE BEGIN SVCall_IRQn 1 */

    /* USER CODE END SVCall_IRQn 1 */
}

/**
  * @brief This function handles Debug monitor.
  */
void DebugMon_Handler(void)
{
    /* USER CODE BEGIN DebugMonitor_IRQn 0 */
    scnsYingErrorHandler(0,0,__FILE__,__LINE__,__FUNCTION__);

    /* USER CODE END DebugMonitor_IRQn 0 */
    /* USER CODE BEGIN DebugMonitor_IRQn 1 */

    /* USER CODE END DebugMonitor_IRQn 1 */
}

/**
  * @brief This function handles Pendable request for system service.
  */
void PendSV_Handler(void)
{
    /* USER CODE BEGIN PendSV_IRQn 0 */
    scnsYingErrorHandler(0,0,__FILE__,__LINE__,__FUNCTION__);

    /* USER CODE END PendSV_IRQn 0 */
    /* USER CODE BEGIN PendSV_IRQn 1 */

    /* USER CODE END PendSV_IRQn 1 */
}

/**
  * @brief This function handles System tick timer.
  */
void SysTick_Handler(void)
{
    /* USER CODE BEGIN SysTick_IRQn 0 */

    /* USER CODE END SysTick_IRQn 0 */
    HAL_IncTick();
    /* USER CODE BEGIN SysTick_IRQn 1 */
    scnsTimerSysTickHandler();
    /* USER CODE END SysTick_IRQn 1 */
}

/******************************************************************************/
/* STM32F1xx Peripheral Interrupt Handlers                                    */
/* Add here the Interrupt Handlers for the used peripherals.                  */
/* For the available peripheral interrupt handler names,                      */
/* please refer to the startup file (startup_stm32f1xx.s).                    */
/******************************************************************************/

/**
  * @brief This function handles DMA1 channel1 global interrupt.
  */
void DMA1_Channel1_IRQHandler(void)
{
    /* USER CODE BEGIN DMA1_Channel1_IRQn 0 */

    /* USER CODE END DMA1_Channel1_IRQn 0 */
    HAL_DMA_IRQHandler(&hdma_memtomem_dma1_channel1);
    /* USER CODE BEGIN DMA1_Channel1_IRQn 1 */

    /* USER CODE END DMA1_Channel1_IRQn 1 */
}

/**
  * @brief This function handles DMA1 channel2 global interrupt.
  */
void DMA1_Channel2_IRQHandler(void)
{
    /* USER CODE BEGIN DMA1_Channel2_IRQn 0 */

    /* USER CODE END DMA1_Channel2_IRQn 0 */
    HAL_DMA_IRQHandler(&hdma_usart3_tx);
    /* USER CODE BEGIN DMA1_Channel2_IRQn 1 */

    /* USER CODE END DMA1_Channel2_IRQn 1 */
}

/**
  * @brief This function handles DMA1 channel3 global interrupt.
  */
void DMA1_Channel3_IRQHandler(void)
{
    /* USER CODE BEGIN DMA1_Channel3_IRQn 0 */

    /* USER CODE END DMA1_Channel3_IRQn 0 */
    HAL_DMA_IRQHandler(&hdma_usart3_rx);
    /* USER CODE BEGIN DMA1_Channel3_IRQn 1 */

    /* USER CODE END DMA1_Channel3_IRQn 1 */
}

/**
  * @brief This function handles DMA1 channel4 global interrupt.
  */
void DMA1_Channel4_IRQHandler(void)
{
    /* USER CODE BEGIN DMA1_Channel4_IRQn 0 */

    /* USER CODE END DMA1_Channel4_IRQn 0 */
    HAL_DMA_IRQHandler(&hdma_usart1_tx);
    /* USER CODE BEGIN DMA1_Channel4_IRQn 1 */

    /* USER CODE END DMA1_Channel4_IRQn 1 */
}

/**
  * @brief This function handles DMA1 channel5 global interrupt.
  */
void DMA1_Channel5_IRQHandler(void)
{
    /* USER CODE BEGIN DMA1_Channel5_IRQn 0 */

    /* USER CODE END DMA1_Channel5_IRQn 0 */
    HAL_DMA_IRQHandler(&hdma_usart1_rx);
    /* USER CODE BEGIN DMA1_Channel5_IRQn 1 */

    /* USER CODE END DMA1_Channel5_IRQn 1 */
}

/**
  * @brief This function handles EXTI line[9:5] interrupts.
  */
void EXTI9_5_IRQHandler(void)
{
    /* USER CODE BEGIN EXTI9_5_IRQn 0 */

    /* USER CODE END EXTI9_5_IRQn 0 */
    HAL_GPIO_EXTI_IRQHandler(NRF_IRQ_Pin);
    /* USER CODE BEGIN EXTI9_5_IRQn 1 */

    /* USER CODE END EXTI9_5_IRQn 1 */
}

/**
  * @brief This function handles USART1 global interrupt.
  */
void USART1_IRQHandler(void)
{
    /* USER CODE BEGIN USART1_IRQn 0 */

    /* USER CODE END USART1_IRQn 0 */
    HAL_UART_IRQHandler(&huart1);
    /* USER CODE BEGIN USART1_IRQn 1 */

    /* USER CODE END USART1_IRQn 1 */
}

/**
  * @brief This function handles USART3 global interrupt.
  */
void USART3_IRQHandler(void)
{
    /* USER CODE BEGIN USART3_IRQn 0 */
    /* USER CODE END USART3_IRQn 0 */
    HAL_UART_IRQHandler(&huart3);
    /* USER CODE BEGIN USART3_IRQn 1 */

    /* USER CODE END USART3_IRQn 1 */
}

/**
  * @brief This function handles TIM6 global interrupt.
  */
void TIM6_IRQHandler(void)
{
    /* USER CODE BEGIN TIM6_IRQn 0 */

    /* USER CODE END TIM6_IRQn 0 */
    HAL_TIM_IRQHandler(&htim6);
    /* USER CODE BEGIN TIM6_IRQn 1 */

    /* USER CODE END TIM6_IRQn 1 */
}

/**
  * @brief This function handles TIM7 global interrupt.
  */
void TIM7_IRQHandler(void)
{
    /* USER CODE BEGIN TIM7_IRQn 0 */

    /* USER CODE END TIM7_IRQn 0 */
    HAL_TIM_IRQHandler(&htim7);
    /* USER CODE BEGIN TIM7_IRQn 1 */

    /* USER CODE END TIM7_IRQn 1 */
}

/* USER CODE BEGIN 1 */

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim)
{
    if(htim->Instance==TIM6)
    {
        scnsIwdgFeed();
#if defined(SCNS_LED_ENABLE)&&SCNS_LED_ENABLE==1
        static const ScnsLedEnum group[]={
            SCNS_LED_0,
        };
        scnsLedGroupFlow(group,(sizeof(group))/(sizeof(group[0])),250000);
#endif
        if(scnsTimerGetInitedTick()!=0)
        {
#if defined(SCNS_GYRO_ENABLE)&&SCNS_GYRO_ENABLE==1
            scnsGyroInterrupt(SCNS_GYRO_1);
#endif
#if defined(SCNS_DS18B20_ENABLE)&&SCNS_DS18B20_ENABLE==1
            scnsDs18b20Interrupt(SCNS_DS18B20_1);
#endif
#if defined(SCNS_DHT11_ENABLE)&&SCNS_DHT11_ENABLE==1
            scnsDht11Interrupt(SCNS_DHT11_1);
#endif
        }
#if defined(SCNS_KEYBOARD_GPIO_ENABLE)&&SCNS_KEYBOARD_GPIO_ENABLE==1
        scnsKeyboardGpioInterrupt();
#endif
#if defined(SCNS_KEY_ENABLE)&&SCNS_KEY_ENABLE==1
        scnsKeyCallback();
#endif
        hwMotorInterrupt();
        hwAdcInterrupt();
        hwMqttSend();
    }
    if(htim->Instance==TIM7)
    {
#if defined(SCNS_BEEP_ENABLE)&&SCNS_BEEP_ENABLE==1
        scnsBeepInterrupt();
#endif
        if(scnsTimerGetInitedTick()!=0)
        {
        }
#if defined(SCNS_SMCTP_ENABLE)&&SCNS_SMCTP_ENABLE==1
        scnsSmctpFlushBuf();
#endif
    }
}

void HAL_UART_TxCpltCallback(UART_HandleTypeDef*huart)
{
    if(huart==&huart1)
    {
        scnsSmctpSendFinishCallback();
    }
    if(huart==&huart3)
    {
#if defined(SCNS_ESP_AT_UART_ENABLE)&&SCNS_ESP_AT_UART_ENABLE==1
        scnsEspAtUartSendFinishCallback(SCNS_ESP_AT_UART_1);
#endif
#if defined(SCNS_CH9141_AT_UART_ENABLE)&&SCNS_CH9141_AT_UART_ENABLE==1
        scnsCh9141AtUartSendFinishCallback(SCNS_CH9141_AT_UART_1);
#endif
    }
}

void HAL_UART_ErrorCallback(UART_HandleTypeDef*huart)
{
    if(huart==&huart3)
    {
#if defined(SCNS_ESP_AT_UART_ENABLE)&&SCNS_ESP_AT_UART_ENABLE==1
        scnsEspAtUartErrorCallback(SCNS_ESP_AT_UART_1);
#endif
#if defined(SCNS_CH9141_AT_UART_ENABLE)&&SCNS_CH9141_AT_UART_ENABLE==1
        scnsCh9141AtUartSendFinishCallback(SCNS_CH9141_AT_UART_1);
#endif
    }
}

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef*huart,uint16_t Size)
{
    if(huart==&huart1)
    {
        scnsSmctpReceive(NULL,Size);
    }
    if(huart==&huart3)
    {
#if defined(SCNS_ESP_AT_UART_ENABLE)&&SCNS_ESP_AT_UART_ENABLE==1
        scnsEspAtUartReceive(SCNS_ESP_AT_UART_1,NULL,Size);
#endif
#if defined(SCNS_CH9141_AT_UART_ENABLE)&&SCNS_CH9141_AT_UART_ENABLE==1
        scnsCh9141AtUartReceive(SCNS_CH9141_AT_UART_1,NULL,Size);
#endif
    }
}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    if(GPIO_Pin==NRF_IRQ_Pin)
    {
        scnsNrf24l01Interrupt(SCNS_NRF24L01_1);
    }
}
/* USER CODE END 1 */
